﻿using User.EF.Model;

namespace User.EF.Contracts
{
    public interface IMembershipQueries
    {
        /// <summary>
        /// Der Aktuelle context über den die Daten abgerufen werden können
        /// </summary>
        MainModelContainer Context { get; }

        /// <summary>
        /// Ermittelt den passenden User anhand des übergebenen UserNamens
        /// </summary>
        /// <param name="username">Der Username der gesucht werden soll</param>
        /// <returns>User | NULL wenn keiner gefunden wurde.</returns>
        Member GetMemberByUsername(string username);

        /// <summary>
        /// Ermittelt den passenden User anhand des übergebenen UserId
        /// </summary>
        /// <param name="userId">Die userId die gesucht werden soll</param>
        /// <returns>User | NULL wenn keiner gefunden wurde.</returns>
        Member GetMemberById(long userId);

        /// <summary>
        /// Ermittelt den passenden User anhand des übergebenen Reset Tokens
        /// </summary>
        /// <param name="resetToken">Der Token der gesucht werden soll</param>
        /// <returns>User | NULL wenn keiner gefunden wurde.</returns>
        Member GetMemberByResetToken(string resetToken);

        /// <summary>
        /// Fügt den übergebenen Member unserer Memberliste hinzu, wenn die UserId != 0 ist.
        /// </summary>
        /// <param name="member">Der Member der unserer Liste hinzugefügt werden soll</param>
        /// <returns></returns>
        bool AddMember(Member member);

        /// <summary>
        /// Speichern der Einstellungen
        /// </summary>
        /// <returns></returns>
        bool Save();
    }
}
